﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using Framework.Common.Attributes;
using Framework.Serializer;
namespace Framework.Sample
{
    [OrderedDesc("3)    Emit")]
    class Test3 : ITest
    {
        public void Run()
        {
            Console.WriteLine(@"反射是一种很重要的技术，然而它与直接调用相比性能要慢很多，因此如何优化反射性能也就成为一个不得不面对的问题。 目前最常见的优化反射性能的方法就是采用委托：用委托的方式调用需要反射调用的方法（或者属性、字段）。那么如何得到委托呢？ 目前最常见也就是二种方法：Emit, ExpressionTree 。其中ExpressionTree可认为是Emit方法的简化版本， 所以Emit是最根本的方法，它采用在运行时动态构造一段IL代码来包装需要反射调用的代码， 这段动态生成的代码满足某个委托的签名，因此最后可以采用委托的方式代替反射调用。");
            UpdInfo info = new UpdInfo(new Version(2, 2, 2), "asfafasdf");
            string desinfo = info.SToStringJson();
            Console.WriteLine(desinfo);
            //string desinfo =
            //     "{\"LatestVer\":{\"Major\":1,\"Minor\":0,\"Build\":0,\"Revision\":1,\"MajorRevision\":0,\"MinorRevision\":1},\"UpdContent\":\"更新信息：\r\n1、阿萨德法国和健康；\r\n2、请问而天语ioi；\r\n3、自行阿萨德法国和健康；\r\n4、的法国和健康了；\r\n5、的人挑拨普君乯。\"}";
            info = desinfo.SFromStringJson<UpdInfo>();
            Console.WriteLine(info);
        }
    }

    [Serializable]
    public class UpdInfo
    {
        public Version LatestVer
        {
            get
            {
                if (!string.IsNullOrWhiteSpace(V))
                {
                    return Version.Parse(V);
                }
                return null;
            }
            set
            {
                V = value.ToString();
            }
        }

        public string UpdContent { get; set; }

        public string V { get; set; }

        public UpdInfo()
        {

        }

        public UpdInfo(Version ver, string info)
        {
            LatestVer = ver;
            UpdContent = info;
        }

        public UpdInfo(string strVer, string info)
            : this(new Version(strVer), info)
        {

        }

    }
}
